AnyPlayer - 为WordPress嵌入各种类型播放器

==============原创作品,转载请注明出处 ==============

本从没打算过要为Wordpress插件,一是基本各类型的插件都能下载得到,二我也懒得去研究。但对于我这样无聊的人没有什么绝对,在几般无奈之下,还愣让我整了个东西出来,正应了那句话——人都是逼出来的!

原因是这样子的:
前阵子转了几个视频和Flash游戏到Blog上,分别来自不同的网站,播放器也五花八门。但每一个都在页面上占很大的地方不太雅观,而且那个Bloxorz游戏在页面打开时就会自动播放,发出诡异的响声,很是不爽,想弄成像U148那样的可以展开与折叠的效果。在网上找了不少这方面的插件,效果都达不到我的希望,但也收获了一个Audio player插件,嵌入音频很方便。后来我还是用了土办法,研究了一下U148的实现方式,让页面加载一个js文件,然后在文章中嵌入这样的代码:

1
[播放视频/音频](javascript:MediaShow()

后来又发现文章一旦编辑后,在IE中会报脚本错误,原来是Wordpress会在编辑文章的时候自作聪明地把<div></div>标签转为<p></p>,而js脚本中使用的又是<div></div>,而且在<p></p>标签内不允许嵌入其它格式块。第N次编辑了五六篇文章后,我实在有些不耐烦了。

过程是这样子的:
我这人习惯用广度优先的算法做事,昨晚本来继续编写我的Robocode机器人,想还没有很好的idea。于是转而写篇博客为介绍Robocode,这事是早就计划好的,视频我都录好传到土豆上去了。在嵌入视频的时候,脚本又发生了些问题。调试解决后,我开始想怎么样一劳永逸地搞定这事。首先想到的是在编辑文章时在html模式下加入<script>调用播放器函数,js中用document.write()来输出播放器HTML代码,试过后再一次失望地发现Wordpress又自作聪明地把<script></script>内容转义了。忍无可忍的我终于决定自己写一个在Wordpress嵌入各种播放器的插件。想法很简单,仿照Audio player的方式,通过在文章中输入[xxxplayer:]并附件属性的方式嵌入播放器,在页面打开的时候把这部分代码替换为对应的播放器。

用Google找到了篇在wordpress中使用Javascript的文章,介绍了一种最简单的内容替换插件实现,再结合Audio player的源码,我已经对实现方式有了把握。接下来研究如何使用正则表达式提取[xxxplayer:a=aaa …]中的属性,我的初衷是希望它可以有很高的兼容性,可以提取类似[xxxplayer:a=”aaa;’aaa’;aaa” b=’b b b’ c=ccc …]这样各种引号形式的标签。我的正则是个半桶水的水平,又趁这机会找了个PHP正则表达式的教程仔细地看了一把,一个小时后还是没写出来。上网搜,两个小时后还是没搜到。看来难度很高,于是退而求次,只解析有双引号括起来的属性。最后在部署插件的时候,发现它根本没按我所想的去工作,在编辑模式下半角输入的双引号,用HTML都成了全角,而且“”"这三种形式的同时存在,百思不得其解。只能再退一步,不给属性加引号了,最后的正则是这样的。

1
2
3
4
// 从内容中获得指定属性
function get_attribute($player_info, $attribute){
return preg_replace("/(.*)" . $attribute . "([ ]?)=([ ]?)([^ ]*)(.*)/i", "$4", $player_info);
}

把它传到远程服务器上,运行正常。

使用是这样子的:
在文章编辑模式入插入[anyplayer:type=swf url=http://xxxx.com/swf width=400 height=300]。

  1. type是媒体类型,支持swf flv mp3 wma wmv rm ra qt
  2. url是媒体地址
  3. width是播放器宽度,缺省则为450
  4. height是播放器高度,缺省则为350
  5. auto是自动播放属性,0-第一优先,即页面上的第一个媒体将自动播放,其它媒体折叠;1-自动播放;2-非自动播放

PS:属性不能用引号括起来

效果是这样子的:
swf:支持各种标准的flash文件,常见视频网站上的视频都可采用这种方式发布

[anyplayer:type=swf url=http://player.youku.com/player.php/sid/XMTU2OTU3OTQ0/v.swf width=425 height=355]

mp3:如果不需要皮肤自定义功能的话,可以替下Audio player了,该模式下宽高属性无效

这个例子演示了一下auto属性

1
2
3
[anyplayer:type=mp3  url=http://tjstart.com/special/tianlai2010/musics/3.mp3 auto=1]

[anyplayer:type=mp3 url=http://tjstart.com/special/tianlai2010/musics/3.mp3 open=yes]

flv:和swf使用一样,现在已经少有网站会给出flv地址了,演示地址已经失效

1
[anyplayer:type=flv url=http://www.helpexamples.com/flash/video/clouds.flv width=460 height=330]

wma:调用MediaPlayer播放音频,Firefox、Chrome下要额外插件支持,该模式下宽高属性无效;也可以用来播放mp3,但不推荐

1
[anyplayer:url=http://support.microsoft.com/support/mediaplayer/wmptest/samples/new/mediaexample.wma]

wmv:调用MediaPlayer播放音频,Firefox、Chrome下要额外插件支持

1
[anyplayer:type=wmv  url=http://support.microsoft.com/support/mediaplayer/wmptest/samples/new/mediaexample.wmv width=460 height=400]

qt:浏览器须有QuickTime插件支持

1
[anyplayer:type=qt url=http://wbads-62.vo.llnwd.net/e1/harrypotter/us/med/azkaban/azk_tlr1_500.mov width=600 height=300 title:harrypotter]

…后面其它格式以此类推

最新修改:
v0.0.4 修正了部分主机对js参数有安全性检查, 可能导致无法显示播放器的Bug

下载是这样子的:
[download id=7]

==============原创作品,转载请注明出处 ==============